package com.liuxl.db.tool;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import com.github.pagehelper.Page;
import com.liuxl.db.bo.Column;
/**
 * 数据库操作接口类
 * Created by LiuXiaoLong at 2021年1月14日
 */
public interface DatabaseTool {


	/**
	 * 查询当前数据库表名信息
	 * @param dataSource 数据源
	 * @return
	 * @throws SQLException
	 */
	public List<String> getTableNames(DataSource dataSource) throws SQLException;

	/**
	 * 根据表名查询列名信息
	 * @param dataSource 数据源
	 * @param tableName 表名
	 * @return
	 * @throws SQLException
	 */
	public List<String> getColumnNames(DataSource dataSource, String tableName) throws SQLException;

	/**
	 * 分页查询
	 * 分页的步骤：
	 * 		1.查询总行数
	 * 			利用CountSqlParser（SqlServer数据库有差别）解析器将传入的SQL转换成Count SQL进行查询获得总行数
	 * 		2.根据分页参数查询数据行
	 * 			加入分页SQL，根据分页参数查询数据行
	 * @param datasource 数据源
	 * @param pageRequest	分页对象
	 * @param sql 查询SQL语句
	 * @param parameters SQL参数
	 * @return
	 */
	public Page<Map<String, Object>> retrievePage(DataSource datasource, Page<Map<String,Object>> page, String sql,
			List<Object> parameters) throws SQLException;

	/**
	 * 判断该数据源中是否存在指定某表
	 * @param dataSource 数据源
	 * @param tableName 表名
	 * @return
	 * @throws SQLException
	 */
	public boolean existsTableName(DataSource dataSource, String tableName) throws SQLException;

	/**
	 * 判断该数据源中指定表中是否存在某列
	 * @param dataSource 数据源
	 * @param tableName 表名
	 * @param columnName 列名
	 * @return
	 * @throws SQLException
	 */
	public boolean existsColumnName(DataSource dataSource,String tableName,String columnName) throws SQLException;

	/**
	 * 添加字段
	 * @param dataSource 数据源
	 * @param tableName 表名
	 * @param column 字段信息
	 * @throws SQLException
	 */
	public void addColumn(DataSource dataSource,String tableName, Column column) throws SQLException;
	

	/**
	 * 删除字段
	 * @param dataSource 数据源
	 * @param tableName 表名
	 * @param columnName 列名
	 * @throws SQLException
	 */
	public void dropColumn(DataSource dataSource,String tableName, String columnName) throws SQLException;
	
	/**
	 * 修改字段
	 * @param dataSource
	 * @param tableName
	 * @param column
	 * @throws SQLException
	 */
	public void modifyColumn(DataSource dataSource,String tableName,Column column) throws SQLException;
	
}
